package com.jichangxiu.socket.entity;

import com.jichangxiu.common.entity.bo.Record;
import com.jichangxiu.framework.utils.SecurityUtils;
import com.jichangxiu.socket.enums.SocketPage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SocketResult {

    /**
     * 来自哪个用户
     */
    private String from;

    /**
     * 去到哪个用户
     */
    private String to;

    /**
     * 消息实体
     */
    private Record record;

    /**
     * 前端哪个页面接收
     */
    private String page;

    /**
     * 前端用于区别消息的类型
     */
    private String type;

    /**
     * 消息提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getMsgRecord(String content) {
        return Record.getRecord("modal", "infoMessage").set("content", content);
    }

    /**
     * 错误消息提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getErrorMsgRecord(String content) {
        return Record.getRecord("modal", "errorMessage").set("content", content);
    }

    /**
     * 成功消息提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getSuccessMsgRecord(String content) {
        return Record.getRecord("modal", "successMessage").set("content", content);
    }

    /**
     * 警告消息提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getWarningMsgRecord(String content) {
        return Record.getRecord("modal", "warningMessage").set("content", content);
    }

    /**
     * 弹出提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getAlertRecord(String content) {
        return Record.getRecord("modal", "infoAlert").set("content", content);
    }

    /**
     * 弹出错误提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getErrorAlertRecord(String content) {
        return Record.getRecord("modal", "errorAlert").set("content", content);
    }

    /**
     * 弹出成功提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getSuccessAlertRecord(String content) {
        return Record.getRecord("modal", "successAlert").set("content", content);
    }

    /**
     * 弹出警告提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getWarningAlertRecord(String content) {
        return Record.getRecord("modal", "warningAlert").set("content", content);
    }

    /**
     * 通知提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getNotifyRecord(String content) {
        return Record.getRecord("modal", "infoNotify").set("content", content);
    }

    /**
     * 错误通知提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getErrorNotifyRecord(String content) {
        return Record.getRecord("modal", "errorNotify").set("content", content);
    }

    /**
     * 成功通知提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getSuccessNotifyRecord(String content) {
        return Record.getRecord("modal", "successNotify").set("content", content);
    }

    /**
     * 警告通知提示
     *
     * @param content 内容
     * @return 消息
     */
    public static Record getWarningNotifyRecord(String content) {
        return Record.getRecord("modal", "warningNotify").set("content", content);
    }

    /**
     * 异步 发给 指定用户 指定页面
     *
     * @param from   来自
     * @param to     去到
     * @param record 消息实体
     * @param page   页面
     * @return socket 传输对象
     */
    public static SocketResult asyncSocketResult(String from, String to, Record record, String page, String type) {
        return new SocketResult(from, to, record, page, type);
    }

    /**
     * 异步 发给 所有用户 指定页面
     *
     * @param from   来自
     * @param record 消息实体
     * @param page   页面
     * @return 传输对象
     */
    public static SocketResult asyncSocketResult(String from, Record record, String page, String type) {
        return new SocketResult(from, null, record, page, type);
    }

    /**
     * 异步 发给 指定用户 跟页面
     *
     * @param from   来自
     * @param to     去到
     * @param record 消息实体
     * @return 传输对象
     */
    public static SocketResult asyncSocketResult(String from, String to, Record record, String type) {
        return new SocketResult(from, to, record, SocketPage.APP.getPage(), type);
    }

    /**
     * 异步 发给 所有用户 跟页面
     *
     * @param from   来自
     * @param record 消息实体
     * @return 传输对象
     */
    public static SocketResult asyncSocketResult(String from, Record record, String type) {
        return new SocketResult(from, null, record, SocketPage.APP.getPage(), type);
    }

    /**
     * 同步 发给 指定用户 指定页面
     *
     * @param to     去到
     * @param record 消息实体
     * @param page   页面
     * @return 传输对象
     */
    public static SocketResult syncSocketResult(String to, Record record, String page, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), to, record, page, type);
    }

    /**
     * 同步 发给 所有用户 指定页面
     *
     * @param record 消息实体
     * @param page   页面
     * @return 传输对象
     */
    public static SocketResult syncSocketResult(Record record, String page, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), null, record, page, type);
    }

    /**
     * 同步 发给 指定用户 跟页面
     *
     * @param to     去到
     * @param record 消息实体
     * @return 传输对象
     */
    public static SocketResult syncSocketResult(String to, Record record, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), to, record, SocketPage.APP.getPage(), type);
    }

    /**
     * 同步 发给 所有用户 跟页面
     *
     * @param record 消息实体
     * @return 传输对象
     */
    public static SocketResult syncSocketResult(Record record, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), null, record, SocketPage.APP.getPage(), type);
    }

    /**
     * 同步 发给 当前用户 指定页面
     *
     * @param record 消息实体
     * @param page   页面
     * @return socket 传输对象
     */
    public static SocketResult selfSocketResult(Record record, String page, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), SecurityUtils.getUserInfo().getUserId(), record, page, type);
    }

    /**
     * 同步 发给 当前用户 跟页面
     *
     * @param record 消息实体
     * @return 传输对象
     */
    public static SocketResult selfSocketResult(Record record, String type) {
        return new SocketResult(SecurityUtils.getUserInfo().getUserId(), SecurityUtils.getUserInfo().getUserId(), record, SocketPage.APP.getPage(), type);
    }

}
